package org.example.rocketmq.msg_type.filter;

import org.apache.commons.lang3.ThreadUtils;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.MessageQueueSelector;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageQueue;
import org.apache.rocketmq.remoting.common.RemotingHelper;

import java.time.Duration;
import java.util.List;

/**
 * 过滤消息
 * 在大多数情况下， 可以使用 Message的Tag属性来简单快速的过滤信息。
 */
public class ProducerFilterTag {

    public static void main(String[] args) throws Exception {
        producer();
    }


    /**
     * 顺序消息值生产者局部有序发送到一个 queue, 但多个 queue 之间是全局无序的。
     * 顺序消息生产者样例：通过 MessageQueueSelector将消息有序发送到同一个queue中
     *
     * @throws Exception
     */
    public static void producer() throws Exception {
        DefaultMQProducer producer = new DefaultMQProducer("producer_order_group_01");
        producer.setNamesrvAddr("rocketmq.jun.cn:9876");
        producer.start();

        String[] tags = new String[]{"TagA", "TagB", "TagC"};

        for (int i = 0; i < 5; i++) {
            Message message = new Message("TopicTest", tags[i % tags.length], ("Hello RocketMQ Order" + tags[i % tags.length] + "_step").getBytes(RemotingHelper.DEFAULT_CHARSET));

            SendResult result = producer.send(message);
            System.out.printf("消息发送成功 " + tags[i % tags.length] + " %s%n", result);
        }

        producer.shutdown();
    }

}
